
#ifndef IDictionaryEnumerator_h
#define IDictionaryEnumerator_h

// Riccsson includes.
#include <Typedef.h>
#include <Defines.h>
#include <CSharpPropertyMethods.h>

#include <System/Collections/IEnumerator.h>
#include <System/Collections/DictionaryEntry.h>

namespace Riccsson
{
	namespace System
	{
		namespace Collections
		{
			// Summary:
			//     Enumerates the elements of a nongeneric dictionary.
			interface IDictionaryEnumerator : public IEnumerator
			{
				PROP3GET(IDictionaryEnumerator, DictionaryEntry, Entry)
				PROP3GET(IDictionaryEnumerator, GC_PTR<object>, Key)
				PROP3GET(IDictionaryEnumerator, GC_PTR<object>, Value)

				COPY_CONSTRUCTOR(IDictionaryEnumerator)
				{
					PROP3GET_INIT_COPY(IDictionaryEnumerator, DictionaryEntry, Entry);
					PROP3GET_INIT_COPY(IDictionaryEnumerator, GC_PTR<object>, Key);
					PROP3GET_INIT_COPY(IDictionaryEnumerator, GC_PTR<object>, Value);
				}

				protected: IDictionaryEnumerator()
					: PROP3GET_INIT(IDictionaryEnumerator, Entry)
					, PROP3GET_INIT(IDictionaryEnumerator, Key)
					, PROP3GET_INIT(IDictionaryEnumerator, Value)
				{
				}

				// Summary:
				//     Gets both the key and the value of the current dictionary entry.
				//
				// Returns:
				//     A System.Collections.DictionaryEntry containing both the key and the value
				//     of the current dictionary entry.
				//
				// Exceptions:
				//   System.InvalidOperationException:
				//     The System.Collections.IDictionaryEnumerator is positioned before the first
				//     entry of the dictionary or after the last entry.
				PROP3_GET(DictionaryEntry, Entry)
				{
					throw;
				}

				//
				// Summary:
				//     Gets the key of the current dictionary entry.
				//
				// Returns:
				//     The key of the current element of the enumeration.
				//
				// Exceptions:
				//   System.InvalidOperationException:
				//     The System.Collections.IDictionaryEnumerator is positioned before the first
				//     entry of the dictionary or after the last entry.
				PROP3_GET(GC_PTR<object>, Key)
				{
					throw;
				}

				//
				// Summary:
				//     Gets the value of the current dictionary entry.
				//
				// Returns:
				//     The value of the current element of the enumeration.
				//
				// Exceptions:
				//   System.InvalidOperationException:
				//     The System.Collections.IDictionaryEnumerator is positioned before the first
				//     entry of the dictionary or after the last entry.
				PROP3_GET(GC_PTR<object>, Value)
				{
					throw;
				}
			};
		}
	}
}

#endif